package persistent.prestige.platform.security;

import java.io.Serializable;
import java.util.Iterator;

import org.apache.shiro.SecurityUtils;

import persistent.prestige.platform.base.utils.PropertyHolder;
import persistent.prestige.platform.security.config.SecurityConfig;
import persistent.prestige.platform.security.model.Role;
import persistent.prestige.platform.security.model.User;


/**
 * 系统安全管理器
 * 
 * @author prestigeding
 * 
 */
public class PlatformSecurityManager {

	/**
	 * 获取当前登录用户
	 * 
	 * 建议改用shiro的session，原因： 1.用了shiro管理权限 2.与容器无关
	 * 
	 * @return
	 */
	public static final User getLoginUser() {
		/**
		 * 建议改用shiro的session，原因： 1.用了shiro管理权限 2.与容器无关
		 */
		if(SecurityUtils.getSubject() != null ) {
			return (User) SecurityUtils.getSubject().getSession().getAttribute(
					SecurityConfig.CURRNET_USER_OBJ_KEY);
		} else {
			return null;
		}
		
	}

	/**
	 * 获取当前登录用ID
	 * 
	 * @return
	 */
	public static final Serializable getLoginUserId() {
		User user = getLoginUser();
		if (user != null)
			return user.getId();
		return null;
	}

	/**
	 * 
	 * @return
	 */
	public static final String getLoginUserLoginName() {
		User user = getLoginUser();
		if (user != null)
			return user.getLoginName();
		return null;
	}

	/**
	 * 判断当前登录用户 是否拥有编号为roleCode的角色<br/> 
	 * 黎海明
	 * 
	 * @param roleCode  ： 角色编码
	 * @return
	 */
	public static final boolean isLoginedUserInRole(String roleCode) {
	/*	
		User user = getLoginUser();
		if (user == null || StringUtils.isEmpty(roleCode))
			return false;
		for (Iterator<? extends Role> it = user.getAllRoles().iterator(); it
				.hasNext();) {
			Role role = it.next();
			if (roleCode.equals(role.getRoleCode())) {
				return true;
			}
		}

		return false;
	*/
		
		return true;
//		return SecurityUtils.getSubject().hasRole(roleCode);
	}
	
	/**
	 * 判断当前用户是否具有权限编号为 resourceCode 的权限
	 * @param resourceCode
	 * @return
	 */
	public static final boolean isLoginedUserHasPerm(String resourceCode) {
		if(isLoginedUserIsAdmin() && "1".equals(PropertyHolder.getProperty("adminHasAllPerm"))) {
			return true;
		}
		return SecurityUtils.getSubject().isPermitted(resourceCode);
	}
	
	/**
	 * 此处判断当前用户是不是超级管理员
	 * 没有使用shiro 原因是，，在获取权限的时候，如果是超级管理员，则需要查询出所有权限。
	 * @return
	 */
	public static final boolean isLoginedUserIsAdmin() {
		User user = getLoginUser();
		if (user == null)
			return false;
		for (Iterator<? extends Role> it = user.getAllRoles().iterator(); it
				.hasNext();) {
			Role role = it.next();
			if (PropertyHolder.getProperty("ROLE_ADMIN_CODE").equals(role.getRoleCode())) {
				return true;
			}
		}
		return  false;
	}

}
